home *** CD-ROM | disk | FTP | other *** search
/ Micromanía: 150 Juegos 2010 / 150Juegos_16.iso / Shareware / Shape Smash / shape-smash.swf / scripts / mx / controls / Button.as next >
Encoding:
Text File  |  2010-05-14  |  37.4 KB  |  1,197 lines

  1. package mx.controls
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.Event;
  5.    import flash.events.FocusEvent;
  6.    import flash.events.KeyboardEvent;
  7.    import flash.events.MouseEvent;
  8.    import flash.events.TimerEvent;
  9.    import flash.text.TextLineMetrics;
  10.    import flash.ui.Keyboard;
  11.    import flash.utils.Timer;
  12.    import mx.controls.dataGridClasses.DataGridListData;
  13.    import mx.controls.listClasses.BaseListData;
  14.    import mx.controls.listClasses.IDropInListItemRenderer;
  15.    import mx.controls.listClasses.IListItemRenderer;
  16.    import mx.core.EdgeMetrics;
  17.    import mx.core.IDataRenderer;
  18.    import mx.core.IFlexDisplayObject;
  19.    import mx.core.IInvalidating;
  20.    import mx.core.IUIComponent;
  21.    import mx.core.UIComponent;
  22.    import mx.core.UITextField;
  23.    import mx.core.mx_internal;
  24.    import mx.events.FlexEvent;
  25.    import mx.managers.IFocusManagerComponent;
  26.    import mx.skins.ProgrammaticSkin;
  27.    import mx.skins.RectangularBorder;
  28.    import mx.styles.ISimpleStyleClient;
  29.    
  30.    use namespace mx_internal;
  31.    
  32.    public class Button extends UIComponent implements IDataRenderer, IDropInListItemRenderer, IFocusManagerComponent, IListItemRenderer
  33.    {
  34.       mx_internal static var createAccessibilityImplementation:Function;
  35.       
  36.       mx_internal static const VERSION:String = "2.0.1.0";
  37.       
  38.       private var enabledChanged:Boolean = false;
  39.       
  40.       private var skinMeasuredWidth:Number;
  41.       
  42.       mx_internal var disabledSkinName:String = "disabledSkin";
  43.       
  44.       mx_internal var downSkinName:String = "downSkin";
  45.       
  46.       mx_internal var _labelPlacement:String = "right";
  47.       
  48.       private var _data:Object;
  49.       
  50.       private var _phase:String = "up";
  51.       
  52.       mx_internal var _toggle:Boolean = false;
  53.       
  54.       mx_internal var selectedOverSkinName:String = "selectedOverSkin";
  55.       
  56.       mx_internal var selectedDisabledSkinName:String = "selectedDisabledSkin";
  57.       
  58.       private var labelSet:Boolean;
  59.       
  60.       mx_internal var toggleChanged:Boolean = false;
  61.       
  62.       private var labelChanged:Boolean = false;
  63.       
  64.       private var autoRepeatTimer:Timer;
  65.       
  66.       mx_internal var disabledIconName:String = "disabledIcon";
  67.       
  68.       mx_internal var upSkinName:String = "upSkin";
  69.       
  70.       private var toolTipSet:Boolean = false;
  71.       
  72.       mx_internal var downIconName:String = "downIcon";
  73.       
  74.       mx_internal var currentIcon:IFlexDisplayObject;
  75.       
  76.       private var styleChangedFlag:Boolean = true;
  77.       
  78.       private var _autoRepeat:Boolean = false;
  79.       
  80.       mx_internal var selectedOverIconName:String = "selectedOverIcon";
  81.       
  82.       private var _label:String = "";
  83.       
  84.       mx_internal var selectedDisabledIconName:String = "selectedDisabledIcon";
  85.       
  86.       mx_internal var extraSpacing:Number;
  87.       
  88.       mx_internal var selectedUpSkinName:String = "selectedUpSkin";
  89.       
  90.       mx_internal var upIconName:String = "upIcon";
  91.       
  92.       mx_internal var buttonOffset:Number = 0;
  93.       
  94.       private var skinMeasuredHeight:Number;
  95.       
  96.       mx_internal var centerContent:Boolean = true;
  97.       
  98.       private var oldUnscaledWidth:Number;
  99.       
  100.       private var skins:Array;
  101.       
  102.       mx_internal var overSkinName:String = "overSkin";
  103.       
  104.       mx_internal var currentSkin:IFlexDisplayObject;
  105.       
  106.       mx_internal var selectedDownSkinName:String = "selectedDownSkin";
  107.       
  108.       private var _listData:BaseListData;
  109.       
  110.       mx_internal var iconName:String = "icon";
  111.       
  112.       mx_internal var _emphasized:Boolean = false;
  113.       
  114.       public var selectedField:String = null;
  115.       
  116.       private var icons:Array;
  117.       
  118.       public var stickyHighlighting:Boolean = false;
  119.       
  120.       mx_internal var selectedUpIconName:String = "selectedUpIcon";
  121.       
  122.       mx_internal var selectedDownIconName:String = "selectedDownIcon";
  123.       
  124.       mx_internal var overIconName:String = "overIcon";
  125.       
  126.       private var selectedSet:Boolean;
  127.       
  128.       protected var textField:UITextField;
  129.       
  130.       mx_internal var _selected:Boolean = false;
  131.       
  132.       public function Button()
  133.       {
  134.          skins = [];
  135.          icons = [];
  136.          mx_internal::buttonOffset = 0;
  137.          mx_internal::centerContent = true;
  138.          mx_internal::extraSpacing = 10 + 10;
  139.          styleChangedFlag = true;
  140.          mx_internal::upSkinName = "upSkin";
  141.          mx_internal::overSkinName = "overSkin";
  142.          mx_internal::downSkinName = "downSkin";
  143.          mx_internal::disabledSkinName = "disabledSkin";
  144.          mx_internal::selectedUpSkinName = "selectedUpSkin";
  145.          mx_internal::selectedOverSkinName = "selectedOverSkin";
  146.          mx_internal::selectedDownSkinName = "selectedDownSkin";
  147.          mx_internal::selectedDisabledSkinName = "selectedDisabledSkin";
  148.          mx_internal::iconName = "icon";
  149.          mx_internal::upIconName = "upIcon";
  150.          mx_internal::overIconName = "overIcon";
  151.          mx_internal::downIconName = "downIcon";
  152.          mx_internal::disabledIconName = "disabledIcon";
  153.          mx_internal::selectedUpIconName = "selectedUpIcon";
  154.          mx_internal::selectedOverIconName = "selectedOverIcon";
  155.          mx_internal::selectedDownIconName = "selectedDownIcon";
  156.          mx_internal::selectedDisabledIconName = "selectedDisabledIcon";
  157.          enabledChanged = false;
  158.          toolTipSet = false;
  159.          _autoRepeat = false;
  160.          mx_internal::_emphasized = false;
  161.          _label = "";
  162.          labelChanged = false;
  163.          mx_internal::_labelPlacement = ButtonLabelPlacement.RIGHT;
  164.          _phase = ButtonPhase.UP;
  165.          mx_internal::_selected = false;
  166.          selectedField = null;
  167.          stickyHighlighting = false;
  168.          mx_internal::_toggle = false;
  169.          mx_internal::toggleChanged = false;
  170.          super();
  171.          mouseChildren = false;
  172.          addEventListener(MouseEvent.ROLL_OVER,rollOverHandler);
  173.          addEventListener(MouseEvent.ROLL_OUT,rollOutHandler);
  174.          addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
  175.          addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
  176.          addEventListener(MouseEvent.CLICK,clickHandler);
  177.       }
  178.       
  179.       override protected function adjustFocusRect(param1:DisplayObject = null) : void
  180.       {
  181.          super.adjustFocusRect(!mx_internal::currentSkin ? DisplayObject(mx_internal::currentIcon) : this);
  182.       }
  183.       
  184.       mx_internal function getCurrentIcon() : IFlexDisplayObject
  185.       {
  186.          var _loc1_:String = null;
  187.          var _loc2_:IFlexDisplayObject = null;
  188.          var _loc3_:Class = null;
  189.          _loc1_ = mx_internal::getCurrentIconName();
  190.          if(!_loc1_)
  191.          {
  192.             return null;
  193.          }
  194.          _loc2_ = IFlexDisplayObject(getChildByName(_loc1_));
  195.          if(_loc2_ == null)
  196.          {
  197.             _loc3_ = Class(getStyle(_loc1_));
  198.             if(_loc3_ == null)
  199.             {
  200.                _loc3_ = Class(getStyle(mx_internal::iconName));
  201.             }
  202.             if(_loc3_ != null)
  203.             {
  204.                _loc2_ = IFlexDisplayObject(new _loc3_());
  205.                _loc2_.name = _loc1_;
  206.                if(_loc2_ is ISimpleStyleClient)
  207.                {
  208.                   ISimpleStyleClient(_loc2_).styleName = this;
  209.                }
  210.                addChild(DisplayObject(_loc2_));
  211.                icons.push(_loc2_);
  212.             }
  213.          }
  214.          return _loc2_;
  215.       }
  216.       
  217.       mx_internal function layoutContents(param1:Number, param2:Number, param3:Boolean) : void
  218.       {
  219.          var _loc4_:Number = NaN;
  220.          var _loc5_:Number = NaN;
  221.          var _loc6_:Number = NaN;
  222.          var _loc7_:Number = NaN;
  223.          var _loc8_:Number = NaN;
  224.          var _loc9_:Number = NaN;
  225.          var _loc10_:Number = NaN;
  226.          var _loc11_:Number = NaN;
  227.          var _loc12_:Number = NaN;
  228.          var _loc13_:Number = NaN;
  229.          var _loc14_:Number = NaN;
  230.          var _loc15_:Number = NaN;
  231.          var _loc16_:Number = NaN;
  232.          var _loc17_:Number = NaN;
  233.          var _loc18_:Number = NaN;
  234.          var _loc19_:Number = NaN;
  235.          var _loc20_:TextLineMetrics = null;
  236.          var _loc21_:Number = NaN;
  237.          var _loc22_:String = null;
  238.          var _loc23_:EdgeMetrics = null;
  239.          var _loc24_:Number = NaN;
  240.          var _loc25_:Number = NaN;
  241.          var _loc26_:Number = NaN;
  242.          var _loc27_:Number = NaN;
  243.          var _loc28_:Number = NaN;
  244.          _loc4_ = 0;
  245.          _loc5_ = 0;
  246.          _loc6_ = 0;
  247.          _loc7_ = 0;
  248.          _loc8_ = 0;
  249.          _loc9_ = 0;
  250.          _loc10_ = 0;
  251.          _loc11_ = 0;
  252.          _loc12_ = 2;
  253.          _loc13_ = 2;
  254.          _loc14_ = getStyle("paddingLeft");
  255.          _loc15_ = getStyle("paddingRight");
  256.          _loc16_ = getStyle("paddingTop");
  257.          _loc17_ = getStyle("paddingBottom");
  258.          _loc18_ = 0;
  259.          _loc19_ = 0;
  260.          if(label)
  261.          {
  262.             _loc20_ = measureText(label);
  263.             if(_loc20_.width > 0)
  264.             {
  265.                _loc18_ = _loc14_ + _loc15_ + getStyle("textIndent") + _loc20_.width;
  266.             }
  267.             _loc19_ = _loc20_.height;
  268.          }
  269.          else
  270.          {
  271.             _loc20_ = measureText("Wj");
  272.             _loc19_ = _loc20_.height;
  273.          }
  274.          _loc21_ = param3 ? mx_internal::buttonOffset : 0;
  275.          _loc22_ = getStyle("textAlign");
  276.          _loc23_ = Boolean(mx_internal::currentSkin) && mx_internal::currentSkin is RectangularBorder ? RectangularBorder(mx_internal::currentSkin).borderMetrics : null;
  277.          _loc24_ = param1;
  278.          _loc25_ = param2 - _loc16_ - _loc17_;
  279.          if(_loc23_)
  280.          {
  281.             _loc24_ -= _loc23_.left + _loc23_.right;
  282.             _loc25_ -= _loc23_.top + _loc23_.bottom;
  283.          }
  284.          if(mx_internal::currentIcon)
  285.          {
  286.             _loc8_ = mx_internal::currentIcon.width;
  287.             _loc9_ = mx_internal::currentIcon.height;
  288.          }
  289.          if(labelPlacement == ButtonLabelPlacement.LEFT || labelPlacement == ButtonLabelPlacement.RIGHT)
  290.          {
  291.             _loc12_ = getStyle("horizontalGap");
  292.             if(_loc8_ == 0 || _loc18_ == 0)
  293.             {
  294.                _loc12_ = 0;
  295.             }
  296.             if(_loc18_ > 0)
  297.             {
  298.                textField.width = _loc4_ = Math.max(_loc24_ - _loc8_ - _loc12_ - _loc14_ - _loc15_,0);
  299.             }
  300.             else
  301.             {
  302.                textField.width = _loc4_ = 0;
  303.             }
  304.             textField.height = _loc5_ = Math.min(_loc25_ + 2,_loc19_ + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  305.             if(labelPlacement == ButtonLabelPlacement.RIGHT)
  306.             {
  307.                _loc6_ = _loc8_ + _loc12_;
  308.                if(mx_internal::centerContent)
  309.                {
  310.                   if(_loc22_ == "left")
  311.                   {
  312.                      _loc6_ += _loc14_;
  313.                   }
  314.                   else if(_loc22_ == "right")
  315.                   {
  316.                      _loc6_ += _loc24_ - _loc4_ - _loc8_ - _loc12_ - _loc14_;
  317.                   }
  318.                   else
  319.                   {
  320.                      _loc28_ = (_loc24_ - _loc4_ - _loc8_ - _loc12_) / 2;
  321.                      _loc6_ += Math.max(_loc28_,_loc14_);
  322.                   }
  323.                }
  324.                _loc10_ = _loc6_ - (_loc8_ + _loc12_);
  325.                if(!mx_internal::centerContent)
  326.                {
  327.                   _loc6_ += _loc14_;
  328.                }
  329.             }
  330.             else
  331.             {
  332.                _loc6_ = _loc24_ - _loc4_ - _loc8_ - _loc12_ - _loc15_;
  333.                if(mx_internal::centerContent)
  334.                {
  335.                   if(_loc22_ == "left")
  336.                   {
  337.                      _loc6_ = 2;
  338.                   }
  339.                   else if(_loc22_ == "right")
  340.                   {
  341.                      _loc6_--;
  342.                   }
  343.                   else if(_loc6_ > 0)
  344.                   {
  345.                      _loc6_ /= 2;
  346.                   }
  347.                }
  348.                _loc10_ = _loc6_ + _loc4_ + _loc12_;
  349.             }
  350.             _loc11_ = _loc7_ = 0;
  351.             if(mx_internal::centerContent)
  352.             {
  353.                _loc11_ = Math.round((_loc25_ - _loc9_) / 2) + _loc16_;
  354.                _loc7_ = Math.round((_loc25_ - _loc5_) / 2) + _loc16_;
  355.             }
  356.             else
  357.             {
  358.                _loc7_ += Math.max(0,(_loc25_ - _loc5_) / 2) + _loc16_;
  359.                _loc11_ += Math.max(0,(_loc25_ - _loc9_) / 2 - 1) + _loc16_;
  360.             }
  361.          }
  362.          else
  363.          {
  364.             _loc13_ = getStyle("verticalGap");
  365.             if(_loc9_ == 0 || _loc19_ == 0)
  366.             {
  367.                _loc13_ = 0;
  368.             }
  369.             if(_loc18_ > 0)
  370.             {
  371.                textField.width = _loc4_ = Math.min(_loc24_,_loc18_ + UITextField.mx_internal::TEXT_WIDTH_PADDING);
  372.                textField.height = _loc5_ = Math.min(_loc25_ - _loc9_ + 1,_loc19_ + 5);
  373.             }
  374.             else
  375.             {
  376.                textField.width = _loc4_ = 0;
  377.                textField.height = _loc5_ = 0;
  378.             }
  379.             _loc6_ = (_loc24_ - _loc4_) / 2;
  380.             _loc10_ = (_loc24_ - _loc8_) / 2;
  381.             if(labelPlacement == ButtonLabelPlacement.TOP)
  382.             {
  383.                _loc7_ = _loc25_ - _loc5_ - _loc9_ - _loc13_;
  384.                if(mx_internal::centerContent && _loc7_ > 0)
  385.                {
  386.                   _loc7_ /= 2;
  387.                }
  388.                _loc7_ += _loc16_;
  389.                _loc11_ = _loc7_ + _loc5_ + _loc13_ - 3;
  390.             }
  391.             else
  392.             {
  393.                _loc7_ = _loc9_ + _loc13_ + _loc16_;
  394.                if(mx_internal::centerContent)
  395.                {
  396.                   _loc7_ += (_loc25_ - _loc5_ - _loc9_ - _loc13_) / 2 + 1;
  397.                }
  398.                _loc11_ = _loc7_ - _loc9_ - _loc13_ + 3;
  399.             }
  400.          }
  401.          _loc26_ = _loc21_;
  402.          _loc27_ = _loc21_;
  403.          if(_loc23_)
  404.          {
  405.             _loc26_ += _loc23_.left;
  406.             _loc27_ += _loc23_.top;
  407.          }
  408.          textField.x = _loc6_ + _loc26_;
  409.          textField.y = _loc7_ + _loc27_;
  410.          if(mx_internal::currentIcon)
  411.          {
  412.             _loc10_ += _loc26_;
  413.             _loc11_ += _loc27_;
  414.             mx_internal::currentIcon.x = Math.round(_loc10_);
  415.             mx_internal::currentIcon.y = Math.round(_loc11_);
  416.          }
  417.          if(mx_internal::currentSkin)
  418.          {
  419.             setChildIndex(DisplayObject(mx_internal::currentSkin),numChildren - 1);
  420.          }
  421.          if(mx_internal::currentIcon)
  422.          {
  423.             setChildIndex(DisplayObject(mx_internal::currentIcon),numChildren - 1);
  424.          }
  425.          if(textField)
  426.          {
  427.             setChildIndex(textField,numChildren - 1);
  428.          }
  429.       }
  430.       
  431.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  432.       {
  433.          if(!enabled)
  434.          {
  435.             return;
  436.          }
  437.          if(param1.keyCode == Keyboard.SPACE)
  438.          {
  439.             mx_internal::buttonPressed();
  440.          }
  441.       }
  442.       
  443.       public function get autoRepeat() : Boolean
  444.       {
  445.          return _autoRepeat;
  446.       }
  447.       
  448.       protected function rollOutHandler(param1:MouseEvent) : void
  449.       {
  450.          if(mx_internal::phase == ButtonPhase.OVER)
  451.          {
  452.             mx_internal::phase = ButtonPhase.UP;
  453.             param1.updateAfterEvent();
  454.          }
  455.          else if(mx_internal::phase == ButtonPhase.DOWN && !stickyHighlighting)
  456.          {
  457.             mx_internal::phase = ButtonPhase.OVER;
  458.             param1.updateAfterEvent();
  459.             if(autoRepeatTimer)
  460.             {
  461.                autoRepeatTimer.stop();
  462.             }
  463.          }
  464.       }
  465.       
  466.       override protected function keyUpHandler(param1:KeyboardEvent) : void
  467.       {
  468.          if(!enabled)
  469.          {
  470.             return;
  471.          }
  472.          if(param1.keyCode == Keyboard.SPACE)
  473.          {
  474.             mx_internal::buttonReleased();
  475.             if(mx_internal::phase == ButtonPhase.DOWN)
  476.             {
  477.                dispatchEvent(new MouseEvent(MouseEvent.CLICK));
  478.             }
  479.             mx_internal::phase = ButtonPhase.UP;
  480.          }
  481.       }
  482.       
  483.       public function set autoRepeat(param1:Boolean) : void
  484.       {
  485.          _autoRepeat = param1;
  486.          if(param1)
  487.          {
  488.             autoRepeatTimer = new Timer(1);
  489.          }
  490.          else
  491.          {
  492.             autoRepeatTimer = null;
  493.          }
  494.       }
  495.       
  496.       mx_internal function buttonPressed() : void
  497.       {
  498.          mx_internal::phase = ButtonPhase.DOWN;
  499.          dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
  500.          if(autoRepeat)
  501.          {
  502.             autoRepeatTimer.delay = getStyle("repeatDelay");
  503.             autoRepeatTimer.addEventListener(TimerEvent.TIMER,autoRepeatTimer_timerDelayHandler);
  504.             autoRepeatTimer.start();
  505.          }
  506.       }
  507.       
  508.       mx_internal function viewIcon() : void
  509.       {
  510.          var _loc1_:String = null;
  511.          _loc1_ = mx_internal::getCurrentIconName();
  512.          mx_internal::viewIconForPhase(_loc1_);
  513.       }
  514.       
  515.       mx_internal function changeSkins() : void
  516.       {
  517.          var _loc1_:int = 0;
  518.          var _loc2_:int = 0;
  519.          _loc1_ = int(skins.length);
  520.          _loc2_ = 0;
  521.          while(_loc2_ < _loc1_)
  522.          {
  523.             removeChild(skins[_loc2_]);
  524.             _loc2_++;
  525.          }
  526.          skins = [];
  527.       }
  528.       
  529.       private function autoRepeatTimer_timerHandler(param1:Event) : void
  530.       {
  531.          if(!enabled)
  532.          {
  533.             return;
  534.          }
  535.          dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
  536.       }
  537.       
  538.       private function systemManager_mouseUpHandler(param1:MouseEvent) : void
  539.       {
  540.          if(contains(DisplayObject(param1.target)))
  541.          {
  542.             return;
  543.          }
  544.          mx_internal::phase = ButtonPhase.UP;
  545.          mx_internal::buttonReleased();
  546.          param1.updateAfterEvent();
  547.       }
  548.       
  549.       protected function mouseUpHandler(param1:MouseEvent) : void
  550.       {
  551.          if(!enabled)
  552.          {
  553.             return;
  554.          }
  555.          mx_internal::phase = ButtonPhase.OVER;
  556.          mx_internal::buttonReleased();
  557.          param1.updateAfterEvent();
  558.       }
  559.       
  560.       public function set labelPlacement(param1:String) : void
  561.       {
  562.          mx_internal::_labelPlacement = param1;
  563.          invalidateSize();
  564.          invalidateDisplayList();
  565.          dispatchEvent(new Event("labelPlacementChanged"));
  566.       }
  567.       
  568.       mx_internal function viewIconForPhase(param1:String) : void
  569.       {
  570.          var _loc2_:IFlexDisplayObject = null;
  571.          var _loc3_:Class = null;
  572.          _loc2_ = IFlexDisplayObject(getChildByName(param1));
  573.          if(_loc2_ == null)
  574.          {
  575.             _loc3_ = Class(getStyle(param1));
  576.             if(_loc3_ == null)
  577.             {
  578.                _loc3_ = Class(getStyle(mx_internal::iconName));
  579.             }
  580.             if(_loc3_ != null)
  581.             {
  582.                _loc2_ = IFlexDisplayObject(new _loc3_());
  583.                _loc2_.name = param1;
  584.                if(_loc2_ is ISimpleStyleClient)
  585.                {
  586.                   ISimpleStyleClient(_loc2_).styleName = this;
  587.                }
  588.                addChild(DisplayObject(_loc2_));
  589.                icons.push(_loc2_);
  590.             }
  591.          }
  592.          if(mx_internal::currentIcon != null)
  593.          {
  594.             mx_internal::currentIcon.visible = false;
  595.          }
  596.          mx_internal::currentIcon = _loc2_;
  597.          if(mx_internal::currentIcon != null)
  598.          {
  599.             mx_internal::currentIcon.visible = true;
  600.          }
  601.       }
  602.       
  603.       mx_internal function getTextField() : UITextField
  604.       {
  605.          return textField;
  606.       }
  607.       
  608.       mx_internal function setSelected(param1:Boolean) : void
  609.       {
  610.          if(mx_internal::_selected != param1)
  611.          {
  612.             mx_internal::_selected = param1;
  613.             invalidateDisplayList();
  614.             if(toggle)
  615.             {
  616.                dispatchEvent(new Event(Event.CHANGE));
  617.             }
  618.             dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  619.          }
  620.       }
  621.       
  622.       protected function clickHandler(param1:MouseEvent) : void
  623.       {
  624.          if(!enabled)
  625.          {
  626.             param1.stopImmediatePropagation();
  627.             return;
  628.          }
  629.          if(toggle)
  630.          {
  631.             mx_internal::setSelected(!selected);
  632.          }
  633.       }
  634.       
  635.       mx_internal function getCurrentIconName() : String
  636.       {
  637.          var _loc1_:String = null;
  638.          if(!enabled)
  639.          {
  640.             _loc1_ = selected ? mx_internal::selectedDisabledIconName : mx_internal::disabledIconName;
  641.          }
  642.          else if(mx_internal::phase == ButtonPhase.UP)
  643.          {
  644.             _loc1_ = selected ? mx_internal::selectedUpIconName : mx_internal::upIconName;
  645.          }
  646.          else if(mx_internal::phase == ButtonPhase.OVER)
  647.          {
  648.             _loc1_ = selected ? mx_internal::selectedOverIconName : mx_internal::overIconName;
  649.          }
  650.          else if(mx_internal::phase == ButtonPhase.DOWN)
  651.          {
  652.             _loc1_ = selected ? mx_internal::selectedDownIconName : mx_internal::downIconName;
  653.          }
  654.          return _loc1_;
  655.       }
  656.       
  657.       public function get emphasized() : Boolean
  658.       {
  659.          return mx_internal::_emphasized;
  660.       }
  661.       
  662.       override protected function measure() : void
  663.       {
  664.          var textWidth:Number = NaN;
  665.          var textHeight:Number = NaN;
  666.          var bm:EdgeMetrics = null;
  667.          var tempCurrentIcon:IFlexDisplayObject = null;
  668.          var iconWidth:Number = NaN;
  669.          var iconHeight:Number = NaN;
  670.          var w:Number = NaN;
  671.          var h:Number = NaN;
  672.          var lineMetrics:TextLineMetrics = null;
  673.          super.measure();
  674.          textWidth = 0;
  675.          textHeight = 0;
  676.          if(label)
  677.          {
  678.             lineMetrics = measureText(label);
  679.             textWidth = lineMetrics.width;
  680.             textHeight = lineMetrics.height;
  681.             textWidth += getStyle("paddingLeft") + getStyle("paddingRight") + getStyle("textIndent");
  682.             textHeight += getStyle("paddingTop") + getStyle("paddingBottom");
  683.          }
  684.          try
  685.          {
  686.             bm = mx_internal::currentSkin["borderMetrics"];
  687.          }
  688.          catch(e:Error)
  689.          {
  690.             bm = new EdgeMetrics(3,3,3,3);
  691.          }
  692.          tempCurrentIcon = mx_internal::getCurrentIcon();
  693.          iconWidth = !!tempCurrentIcon ? tempCurrentIcon.width : 0;
  694.          iconHeight = !!tempCurrentIcon ? tempCurrentIcon.height : 0;
  695.          w = 0;
  696.          h = 0;
  697.          if(labelPlacement == ButtonLabelPlacement.LEFT || labelPlacement == ButtonLabelPlacement.RIGHT)
  698.          {
  699.             w = textWidth + iconWidth;
  700.             if(iconWidth != 0)
  701.             {
  702.                w += getStyle("horizontalGap") - 2;
  703.             }
  704.             h = Math.max(textHeight,iconHeight + 6);
  705.          }
  706.          else
  707.          {
  708.             w = Math.max(textWidth,iconWidth);
  709.             h = textHeight + iconHeight;
  710.             if(iconHeight != 0)
  711.             {
  712.                h += getStyle("verticalGap");
  713.             }
  714.          }
  715.          if(bm)
  716.          {
  717.             w += bm.left + bm.right;
  718.             h += bm.top + bm.bottom;
  719.          }
  720.          if(Boolean(label) && label.length != 0)
  721.          {
  722.             w += mx_internal::extraSpacing;
  723.          }
  724.          else
  725.          {
  726.             w += 6;
  727.          }
  728.          if(Boolean(mx_internal::currentSkin) && (isNaN(skinMeasuredWidth) || isNaN(skinMeasuredHeight)))
  729.          {
  730.             skinMeasuredWidth = mx_internal::currentSkin.measuredWidth;
  731.             skinMeasuredHeight = mx_internal::currentSkin.measuredHeight;
  732.          }
  733.          if(!isNaN(skinMeasuredWidth))
  734.          {
  735.             w = Math.max(skinMeasuredWidth,w);
  736.          }
  737.          if(!isNaN(skinMeasuredHeight))
  738.          {
  739.             h = Math.max(skinMeasuredHeight,h);
  740.          }
  741.          measuredMinWidth = measuredWidth = w;
  742.          measuredMinHeight = measuredHeight = h;
  743.       }
  744.       
  745.       mx_internal function get phase() : String
  746.       {
  747.          return _phase;
  748.       }
  749.       
  750.       public function set selected(param1:Boolean) : void
  751.       {
  752.          selectedSet = true;
  753.          mx_internal::setSelected(param1);
  754.       }
  755.       
  756.       mx_internal function changeIcons() : void
  757.       {
  758.          var _loc1_:int = 0;
  759.          var _loc2_:int = 0;
  760.          _loc1_ = int(icons.length);
  761.          _loc2_ = 0;
  762.          while(_loc2_ < _loc1_)
  763.          {
  764.             removeChild(icons[_loc2_]);
  765.             _loc2_++;
  766.          }
  767.          icons = [];
  768.       }
  769.       
  770.       override protected function commitProperties() : void
  771.       {
  772.          super.commitProperties();
  773.          if(!initialized)
  774.          {
  775.             mx_internal::viewSkin();
  776.             mx_internal::viewIcon();
  777.          }
  778.          if(enabledChanged)
  779.          {
  780.             textField.enabled = enabled;
  781.             enabledChanged = false;
  782.          }
  783.          if(mx_internal::toggleChanged)
  784.          {
  785.             if(!toggle)
  786.             {
  787.                selected = false;
  788.             }
  789.             mx_internal::toggleChanged = false;
  790.          }
  791.       }
  792.       
  793.       [Bindable("dataChange")]
  794.       public function get listData() : BaseListData
  795.       {
  796.          return _listData;
  797.       }
  798.       
  799.       mx_internal function viewSkin() : void
  800.       {
  801.          var _loc1_:String = null;
  802.          if(!enabled)
  803.          {
  804.             _loc1_ = selected ? mx_internal::selectedDisabledSkinName : mx_internal::disabledSkinName;
  805.          }
  806.          else if(mx_internal::phase == ButtonPhase.UP)
  807.          {
  808.             _loc1_ = selected ? mx_internal::selectedUpSkinName : mx_internal::upSkinName;
  809.          }
  810.          else if(mx_internal::phase == ButtonPhase.OVER)
  811.          {
  812.             _loc1_ = selected ? mx_internal::selectedOverSkinName : mx_internal::overSkinName;
  813.          }
  814.          else if(mx_internal::phase == ButtonPhase.DOWN)
  815.          {
  816.             _loc1_ = selected ? mx_internal::selectedDownSkinName : mx_internal::downSkinName;
  817.          }
  818.          mx_internal::viewSkinForPhase(_loc1_);
  819.       }
  820.       
  821.       public function set label(param1:String) : void
  822.       {
  823.          labelSet = true;
  824.          if(_label != param1)
  825.          {
  826.             _label = param1;
  827.             labelChanged = true;
  828.             invalidateSize();
  829.             invalidateDisplayList();
  830.             dispatchEvent(new Event("labelChanged"));
  831.          }
  832.       }
  833.       
  834.       mx_internal function viewSkinForPhase(param1:String) : void
  835.       {
  836.          var _loc2_:IFlexDisplayObject = null;
  837.          var _loc3_:Number = NaN;
  838.          var _loc4_:Class = null;
  839.          var _loc5_:ISimpleStyleClient = null;
  840.          _loc2_ = IFlexDisplayObject(getChildByName(param1));
  841.          if(!_loc2_)
  842.          {
  843.             _loc4_ = Class(getStyle(param1));
  844.             if(_loc4_)
  845.             {
  846.                _loc2_ = IFlexDisplayObject(new _loc4_());
  847.                _loc2_.name = param1;
  848.                _loc5_ = _loc2_ as ISimpleStyleClient;
  849.                if(_loc5_)
  850.                {
  851.                   _loc5_.styleName = this;
  852.                }
  853.                addChild(DisplayObject(_loc2_));
  854.                _loc2_.setActualSize(unscaledWidth,unscaledHeight);
  855.                if(_loc2_ is IInvalidating && initialized)
  856.                {
  857.                   IInvalidating(_loc2_).validateNow();
  858.                }
  859.                else if(_loc2_ is ProgrammaticSkin && initialized)
  860.                {
  861.                   ProgrammaticSkin(_loc2_).validateDisplayList();
  862.                }
  863.                skins.push(_loc2_);
  864.             }
  865.          }
  866.          if(mx_internal::currentSkin)
  867.          {
  868.             mx_internal::currentSkin.visible = false;
  869.          }
  870.          mx_internal::currentSkin = _loc2_;
  871.          if(mx_internal::currentSkin)
  872.          {
  873.             mx_internal::currentSkin.visible = true;
  874.          }
  875.          if(enabled)
  876.          {
  877.             if(mx_internal::phase == ButtonPhase.OVER)
  878.             {
  879.                _loc3_ = textField.getStyle("textRollOverColor");
  880.             }
  881.             else if(mx_internal::phase == ButtonPhase.DOWN)
  882.             {
  883.                _loc3_ = textField.getStyle("textSelectedColor");
  884.             }
  885.             else
  886.             {
  887.                _loc3_ = textField.getStyle("color");
  888.             }
  889.             textField.setColor(_loc3_);
  890.          }
  891.       }
  892.       
  893.       private function autoRepeatTimer_timerDelayHandler(param1:Event) : void
  894.       {
  895.          if(!enabled)
  896.          {
  897.             return;
  898.          }
  899.          dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
  900.          if(autoRepeat)
  901.          {
  902.             autoRepeatTimer.reset();
  903.             autoRepeatTimer.removeEventListener(TimerEvent.TIMER,autoRepeatTimer_timerDelayHandler);
  904.             autoRepeatTimer.delay = getStyle("repeatInterval");
  905.             autoRepeatTimer.addEventListener(TimerEvent.TIMER,autoRepeatTimer_timerHandler);
  906.             autoRepeatTimer.start();
  907.          }
  908.       }
  909.       
  910.       protected function mouseDownHandler(param1:MouseEvent) : void
  911.       {
  912.          if(!enabled)
  913.          {
  914.             return;
  915.          }
  916.          systemManager.addEventListener(MouseEvent.MOUSE_UP,systemManager_mouseUpHandler,true);
  917.          systemManager.stage.addEventListener(Event.MOUSE_LEAVE,stage_mouseLeaveHandler);
  918.          mx_internal::buttonPressed();
  919.          param1.updateAfterEvent();
  920.       }
  921.       
  922.       override public function set enabled(param1:Boolean) : void
  923.       {
  924.          if(super.enabled == param1)
  925.          {
  926.             return;
  927.          }
  928.          super.enabled = param1;
  929.          enabledChanged = true;
  930.          invalidateProperties();
  931.          invalidateDisplayList();
  932.       }
  933.       
  934.       [Bindable("labelPlacementChanged")]
  935.       public function get labelPlacement() : String
  936.       {
  937.          return mx_internal::_labelPlacement;
  938.       }
  939.       
  940.       override public function get baselinePosition() : Number
  941.       {
  942.          var _loc1_:String = null;
  943.          var _loc2_:TextLineMetrics = null;
  944.          _loc1_ = label;
  945.          if(!_loc1_)
  946.          {
  947.             _loc1_ = "Wj";
  948.          }
  949.          validateNow();
  950.          if(!label && (labelPlacement == ButtonLabelPlacement.TOP || labelPlacement == ButtonLabelPlacement.BOTTOM))
  951.          {
  952.             _loc2_ = measureText(_loc1_);
  953.             return (measuredHeight - _loc2_.height) / 2 + _loc2_.ascent;
  954.          }
  955.          return textField.y + measureText(_loc1_).ascent;
  956.       }
  957.       
  958.       public function set toggle(param1:Boolean) : void
  959.       {
  960.          mx_internal::_toggle = param1;
  961.          mx_internal::toggleChanged = true;
  962.          invalidateProperties();
  963.          invalidateDisplayList();
  964.          dispatchEvent(new Event("toggleChanged"));
  965.       }
  966.       
  967.       public function set emphasized(param1:Boolean) : void
  968.       {
  969.          mx_internal::_emphasized = param1;
  970.          mx_internal::changeSkins();
  971.          invalidateDisplayList();
  972.       }
  973.       
  974.       [Bindable("valueCommit")]
  975.       [Bindable("click")]
  976.       public function get selected() : Boolean
  977.       {
  978.          return mx_internal::_selected;
  979.       }
  980.       
  981.       mx_internal function buttonReleased() : void
  982.       {
  983.          systemManager.removeEventListener(MouseEvent.MOUSE_UP,systemManager_mouseUpHandler,true);
  984.          systemManager.stage.removeEventListener(Event.MOUSE_LEAVE,stage_mouseLeaveHandler);
  985.          if(autoRepeatTimer)
  986.          {
  987.             autoRepeatTimer.removeEventListener(TimerEvent.TIMER,autoRepeatTimer_timerDelayHandler);
  988.             autoRepeatTimer.removeEventListener(TimerEvent.TIMER,autoRepeatTimer_timerHandler);
  989.             autoRepeatTimer.reset();
  990.          }
  991.       }
  992.       
  993.       public function set listData(param1:BaseListData) : void
  994.       {
  995.          _listData = param1;
  996.       }
  997.       
  998.       mx_internal function set phase(param1:String) : void
  999.       {
  1000.          _phase = param1;
  1001.          invalidateSize();
  1002.          invalidateDisplayList();
  1003.       }
  1004.       
  1005.       private function stage_mouseLeaveHandler(param1:Event) : void
  1006.       {
  1007.          mx_internal::phase = ButtonPhase.UP;
  1008.          mx_internal::buttonReleased();
  1009.       }
  1010.       
  1011.       [Bindable("labelChanged")]
  1012.       public function get label() : String
  1013.       {
  1014.          return _label;
  1015.       }
  1016.       
  1017.       override protected function focusOutHandler(param1:FocusEvent) : void
  1018.       {
  1019.          super.focusOutHandler(param1);
  1020.          if(mx_internal::phase != ButtonPhase.UP)
  1021.          {
  1022.             mx_internal::phase = ButtonPhase.UP;
  1023.          }
  1024.       }
  1025.       
  1026.       override protected function createChildren() : void
  1027.       {
  1028.          super.createChildren();
  1029.          if(!textField)
  1030.          {
  1031.             textField = new UITextField();
  1032.             textField.styleName = this;
  1033.             addChild(textField);
  1034.          }
  1035.       }
  1036.       
  1037.       protected function rollOverHandler(param1:MouseEvent) : void
  1038.       {
  1039.          if(mx_internal::phase == ButtonPhase.UP)
  1040.          {
  1041.             if(param1.buttonDown)
  1042.             {
  1043.                return;
  1044.             }
  1045.             mx_internal::phase = ButtonPhase.OVER;
  1046.             param1.updateAfterEvent();
  1047.          }
  1048.          else if(mx_internal::phase == ButtonPhase.OVER)
  1049.          {
  1050.             mx_internal::phase = ButtonPhase.DOWN;
  1051.             param1.updateAfterEvent();
  1052.             if(autoRepeatTimer)
  1053.             {
  1054.                autoRepeatTimer.start();
  1055.             }
  1056.          }
  1057.       }
  1058.       
  1059.       public function set data(param1:Object) : void
  1060.       {
  1061.          var _loc2_:* = undefined;
  1062.          var _loc3_:* = undefined;
  1063.          _data = param1;
  1064.          if(Boolean(_listData) && _listData is DataGridListData)
  1065.          {
  1066.             _loc2_ = _data[DataGridListData(_listData).dataField];
  1067.             _loc3_ = "";
  1068.          }
  1069.          else if(_listData)
  1070.          {
  1071.             if(selectedField)
  1072.             {
  1073.                _loc2_ = _data[selectedField];
  1074.             }
  1075.             _loc3_ = _listData.label;
  1076.          }
  1077.          else
  1078.          {
  1079.             _loc2_ = _data;
  1080.          }
  1081.          if(_loc2_ !== undefined && !selectedSet)
  1082.          {
  1083.             selected = _loc2_ as Boolean;
  1084.             selectedSet = false;
  1085.          }
  1086.          if(_loc3_ !== undefined && !labelSet)
  1087.          {
  1088.             label = _loc3_;
  1089.             labelSet = false;
  1090.          }
  1091.          dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
  1092.       }
  1093.       
  1094.       override protected function initializeAccessibility() : void
  1095.       {
  1096.          if(Button.mx_internal::createAccessibilityImplementation != null)
  1097.          {
  1098.             Button.mx_internal::createAccessibilityImplementation(this);
  1099.          }
  1100.       }
  1101.       
  1102.       [Bindable("dataChange")]
  1103.       public function get data() : Object
  1104.       {
  1105.          if(!_data)
  1106.          {
  1107.             _data = {};
  1108.          }
  1109.          return _data;
  1110.       }
  1111.       
  1112.       [Bindable("toggleChanged")]
  1113.       public function get toggle() : Boolean
  1114.       {
  1115.          return mx_internal::_toggle;
  1116.       }
  1117.       
  1118.       override public function styleChanged(param1:String) : void
  1119.       {
  1120.          styleChangedFlag = true;
  1121.          super.styleChanged(param1);
  1122.          if(!param1 || param1 == "styleName")
  1123.          {
  1124.             mx_internal::changeSkins();
  1125.             mx_internal::changeIcons();
  1126.          }
  1127.          else if(param1.toLowerCase().indexOf("skin") != -1)
  1128.          {
  1129.             mx_internal::changeSkins();
  1130.          }
  1131.          else if(param1.toLowerCase().indexOf("icon") != -1)
  1132.          {
  1133.             mx_internal::changeIcons();
  1134.             invalidateSize();
  1135.          }
  1136.       }
  1137.       
  1138.       override public function set toolTip(param1:String) : void
  1139.       {
  1140.          super.toolTip = param1;
  1141.          if(param1)
  1142.          {
  1143.             toolTipSet = true;
  1144.          }
  1145.          else
  1146.          {
  1147.             toolTipSet = false;
  1148.             invalidateDisplayList();
  1149.          }
  1150.       }
  1151.       
  1152.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  1153.       {
  1154.          var _loc3_:int = 0;
  1155.          var _loc4_:int = 0;
  1156.          var _loc5_:IFlexDisplayObject = null;
  1157.          var _loc6_:Boolean = false;
  1158.          super.updateDisplayList(param1,param2);
  1159.          _loc3_ = int(skins.length);
  1160.          _loc4_ = 0;
  1161.          while(_loc4_ < _loc3_)
  1162.          {
  1163.             _loc5_ = IFlexDisplayObject(skins[_loc4_]);
  1164.             _loc5_.setActualSize(param1,param2);
  1165.             _loc4_++;
  1166.          }
  1167.          mx_internal::viewSkin();
  1168.          mx_internal::viewIcon();
  1169.          if(Boolean(mx_internal::currentIcon) && mx_internal::currentIcon is IUIComponent)
  1170.          {
  1171.             IUIComponent(mx_internal::currentIcon).enabled = enabled;
  1172.          }
  1173.          mx_internal::layoutContents(param1,param2,mx_internal::phase == ButtonPhase.DOWN);
  1174.          if(oldUnscaledWidth > param1 || textField.text != label || labelChanged || styleChangedFlag)
  1175.          {
  1176.             textField.text = label;
  1177.             _loc6_ = textField.truncateToFit();
  1178.             if(!toolTipSet)
  1179.             {
  1180.                if(_loc6_)
  1181.                {
  1182.                   super.toolTip = label;
  1183.                }
  1184.                else
  1185.                {
  1186.                   super.toolTip = null;
  1187.                }
  1188.             }
  1189.             styleChangedFlag = false;
  1190.             labelChanged = false;
  1191.          }
  1192.          oldUnscaledWidth = param1;
  1193.       }
  1194.    }
  1195. }
  1196.  
  1197.